]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
texture-cache: Use image-missing image when no other icon was loaded
authorMario Sanchez Prada <mario@endlessm.com>
Wed, 10 May 2017 14:59:32 +0000 (15:59 +0100)
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Mon, 23 Mar 2020 16:50:06 +0000 (13:50 -0300)
If a given icon is not available for neither the current theme nor any
of the fallback options (default theme -"Adwaita", "gnome"...), the
call to gtk_icon_theme_lookup_by_gicon() will return a NULL value, which
returned by the Shell Toolkit as is, causing trouble in the Shell's JS
code when calling shell_app_create_icon_texture() to create an icon.

To at least mitigate the chances of this having this issue happening, we
should at least try to load the standad 'image-missing' icon from the
Icon Naming Specification spec when we receive a NULL here, so that
at least we try to show something to the user, even if it's ugly.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1121

src/st/st-texture-cache.c

index 850c0d697948bf942fdc9b16ce3a9ae217dcbf1b..adffafabaa5a58a77d59beb87998bd51ba9ca4d2 100644 (file)
@@ -34,6 +34,8 @@
 #define CACHE_PREFIX_FILE "file:"
 #define CACHE_PREFIX_FILE_FOR_CAIRO "file-for-cairo:"
 
+#define IMAGE_MISSING_ICON_NAME "image-missing"
+
 struct _StTextureCachePrivate
 {
   GtkIconTheme *icon_theme;
@@ -994,7 +996,15 @@ st_texture_cache_load_gicon (StTextureCache    *cache,
                                                    size, scale,
                                                    lookup_flags);
   if (info == NULL)
-    return NULL;
+    {
+      /* Do not give up without even trying to pick the image-missing fallback icon. */
+      info = gtk_icon_theme_lookup_icon_for_scale (theme,
+                                                   IMAGE_MISSING_ICON_NAME,
+                                                   size, scale,
+                                                   GTK_ICON_LOOKUP_USE_BUILTIN);
+      if (info == NULL)
+        return NULL;
+    }
 
   gicon_string = g_icon_to_string (icon);
   /* A return value of NULL indicates that the icon can not be serialized,